package cl.vixionarios.biotika.dao.implementations.postgresql;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.jboss.logging.Logger;

import cl.vixionarios.biotika.dao.DBBase;
import cl.vixionarios.biotika.dao.interfaces.IBioequivalente;
import cl.vixionarios.biotika.dao.to.BioequivalenteTO;

public class BioequivalenteDB extends DBBase implements IBioequivalente{

	private Logger logger = Logger.getLogger(getClass().getCanonicalName());
	
	public BioequivalenteDB(Connection c)
	{		
		conn = c;
	}
	
	public List<BioequivalenteTO> obtenerBioequivalentes(String producto)
	{	
		PreparedStatement pstmt;
		ResultSet rs;
		List<BioequivalenteTO> resp = new ArrayList<BioequivalenteTO>();
		
		String productoBuscar = "%"+producto+"%";
		
		String query = 	"SELECT" +
							" id," +
							" principio_activo, " +
							" producto," +
							" laboratorio, " +
							" tratamiento" +
						" FROM bioequivalente " +
						" WHERE principio_activo in ( " +
							" SELECT principio_activo FROM bioequivalente " +
							" WHERE upper(producto) LIKE upper(?) " +
							" )" +
							" ORDER BY principio_activo;";
		
		try{
			pstmt = conn.prepareStatement(query);
			pstmt.setString(1, productoBuscar);
			
			rs = pstmt.executeQuery();			
			
			while(rs.next())
			{				
				BioequivalenteTO bioequivalente = new BioequivalenteTO();
				bioequivalente.setIdBioequivalente(rs.getInt("id"));
				bioequivalente.setPrincipioActivo(rs.getString("principio_activo"));
				bioequivalente.setProducto(rs.getString("producto"));
				bioequivalente.setLaboratorio(rs.getString("laboratorio"));
				bioequivalente.setTratamiento(rs.getString("tratamiento"));
				
				if(bioequivalente.getProducto().toUpperCase().contains(bioequivalente.getPrincipioActivo().toUpperCase()))
					bioequivalente.setGenerico(true);
				else
					bioequivalente.setGenerico(false);
				
				resp.add(bioequivalente);
			}
		}
		catch(SQLException ex)
		{
			logger.error("[" + this.getClass().getCanonicalName() + "] [obtenerBioequivalentes][" + ex.getMessage() + "]");
		}
		catch (Exception ex)
		{
			logger.error("[" + this.getClass().getCanonicalName() + "] [obtenerBioequivalentes][" + ex.getMessage() + "]");
		}
		
		return resp;
	}
	
}
